package main

import "fmt"

func twoSum(nums []int, target int) []int {
	intMap := make(map[int]int)
	for i := 0; i < len(nums); i++ {
		val := target - nums[i]
		if _, ok := intMap[val]; ok {
			return []int{i, intMap[val]}
		}
		intMap[nums[i]] = i
	}
	return nil
}

// 基本思路：使用 map 存放数组中的元素和下标

// 1. 遍历数组，将数组中的元素作为 key，数组中的下标作为 value 存入 map 中
// 2. 遍历数组，将 target 减去数组中的元素，得到的值作为 key，从 map 中获取 value
// 3. 如果获取到 value，说明数组中有两个数的和等于 target，返回这两个数的下标
// 4. 如果没有获取到 value，说明数组中没有两个数的和等于 target，返回 nil

func main() {
	nums := []int{2, 7, 11, 15}
	target := 17
	sum := twoSum(nums, target)
	fmt.Println(sum)
}
